//Package controllers API页面控制器
package controllers

import (
	"ShopSupplierApi/models"
	"ShopSupplierApi/services"
	"ShopSupplierApi/utils"
)

//ProductsController 商品货品
type ProductsController struct {
	LcfController
}

// @Title ProductList
// @Description 显示供应商提供的商品列表
// @Param	sid		query	uint64	true	"供应商ID"
// @Param	search	query	string	false "搜索字符串"
// @Param	type	query	int	false	"商品状态"
// @Param	p	body	models.Page	true "数据分页信息"
// @Success 200 {object} models.Product
// @router /list [post]
func (p *ProductsController) ProductList() {
	sid, err := p.GetInt64("sid")
	if err != nil {
		p.JSONFailedError(utils.NotFoundSid)
		return
	}
	if err = p.ParseBodyToPage(); err != nil {
		return
	}
	search := p.GetString("search", "")
	typein, _ := p.GetInt("type", 0) //枚举定义 : models/products/All
	p.JSONPageData(services.ProductServ.ProductList(uint64(sid), search, models.ProductStatusType(typein), p.Data["page"].(*models.Page)))
}

// @Title Product
// @Description 商品基本信息
// @Param	sid	query	uint64	true	"供应商ID"
// @Param	pid	query	uint64	true	"货品ID"
// @Success	200	{object} models.Product
// @router /product [get]
func (p *ProductsController) ProductInfo() {
	sid, err := p.GetInt64("sid")
	if err == nil {
		pid, err := p.GetInt64("pid")
		if err == nil {
			p.JSONSuccess(services.ProductServ.ProductInfo(uint64(sid), uint64(pid)))
		} else {
			p.JSONFailedError(utils.LoseParam("pid[货品ID]"))
		}
	} else {
		p.JSONFailedError(utils.NotFoundSid)
	}
}

// @Title SupplierSupplyProduct
// @Description 供应商供应商品
// @Param   sid query   uint64  true    "供应商ID"
// @Param   pid query   uint64  true    "货品ID"
// @Param   price   query   float64 true    "货品价格"
// @Param   name query   string  false   "货品自定义名称"
// @Param   bn   query   string  false   "货品自定义编码"
// @Success 200 bool
// @router /supplierSupplyProduct [get]
func (p *ProductsController) SupplierSupplyProduct() {
	sid, err := p.GetInt64("sid")
	if err == nil {
		pid, err := p.GetInt64("pid")
		if err == nil {
			price, err := p.GetFloat("price")
			if err == nil {
				productName := p.GetString("name", "")
				productBn := p.GetString("bn", "")
				result, msg := services.ProductServ.SupplierSupplyProduct(uint64(sid), uint64(pid), price, productName, productBn)
				p.JSONSuccess(map[string]interface{}{"success": result, "msg": msg})
			} else {
				p.JSONFailedError(utils.LoseParam("price[货品价格]"))
			}
		} else {
			p.JSONFailedError(utils.LoseParam("pid[货品ID]"))
		}
	} else {
		p.JSONFailedError(utils.NotFoundSid)
	}
}

// @Title SupplierChangeStore
// @Description 供应商修改库存
// @Param   sid query   uint64  true    "供应商ID"
// @Param   pid query   uint64  true    "货品ID"
// @Param   price   query   float64 true    "货品价格"
// @Param   nums query   int32  true   "数量"
// @Param   desp   query   string  false   "备注"
// @Success 200 bool
// @router /supplierChangeStore [get]
func (p *ProductsController) SupplierChangeStore() {
	sid, err := p.GetInt64("sid")
	if err == nil {
		pid, err := p.GetInt64("pid")
		if err == nil {
			price, err := p.GetFloat("price")
			if err == nil {
				nums, err := p.GetInt32("nums", 0)
				if err != nil {
					nums = 0
				}
				description := p.GetString("desp", "")
				result, msg := services.ProductServ.SupplierChangeStore(uint64(sid), uint64(pid), price, nums, description)
				p.JSONSuccess(map[string]interface{}{"success": result, "msg": msg})
			} else {
				p.JSONFailedError(utils.LoseParam("price[货品价格]"))
			}
		} else {
			p.JSONFailedError(utils.LoseParam("pid[货品ID]"))
		}
	} else {
		p.JSONFailedError(utils.NotFoundSid)
	}
}

// @Title SupplierMarketableChange
// @Description 供应商货品上下架
// @Param   sid query   uint64  true    "供应商ID"
// @Param   pid query   uint64  true    "货品ID"
// @Param   v   query   bool true    "上架"
// @Success 200 bool
// @router /supplierMarketableChange [get]
func (p *ProductsController) SupplierMarketableChange() {
	sid, err := p.GetInt64("sid")
	if err == nil {
		pid, err := p.GetInt64("pid")
		if err == nil {
			value, err := p.GetBool("v", true)
			if err != nil {
				value = true
			}
			p.JSONSuccess(services.ProductServ.SupplierMarketableChange(uint64(sid), uint64(pid), value))
		} else {
			p.JSONFailedError(utils.LoseParam("pid[货品ID]"))
		}
	} else {
		p.JSONFailedError(utils.NotFoundSid)
	}
}

// @Title SupplierUpdatePrice
// @Description 供应商更改商品价格
// @Param   sid query   uint64  true    "供应商ID"
// @Param   pid query   uint64  true    "货品ID"
// @Param   price   query   float64 true    "货品价格"
// @Param   desp   query   string  false   "备注"
// @Success 200 bool
// @router /supplierUpdatePrice [get]
func (p *ProductsController) SupplierUpdatePrice() {
	sid, err := p.GetInt64("sid")
	if err == nil {
		pid, err := p.GetInt64("pid")
		if err == nil {
			price, err := p.GetFloat("price")
			if err == nil {
				description := p.GetString("desp", "")
				p.JSONSuccess(services.ProductServ.SupplierUpdatePrice(uint64(sid), uint64(pid), price, description))
			} else {
				p.JSONFailedError(utils.LoseParam("price[货品价格]"))
			}
		} else {
			p.JSONFailedError(utils.LoseParam("pid[货品ID]"))
		}
	} else {
		p.JSONFailedError(utils.NotFoundSid)
	}
}

// @Title ProductSaleLocal
// @Description 货品销售区域统计
// @Param   sid query   uint64  true    "供应商ID"
// @Param   pid query   uint64  true    "货品ID"
// @Param   localType   query   int false    "地区标记[0=省,1=市,2=县]默认:0"
// @Param   regionID   query   int  false   "上一级地区ID,默认:0"
// @Success 200 bool
// @router /productSaleLocal [get]
func (p *ProductsController) ProductSaleLocal() {
	sid, err := p.GetInt64("sid")
	if err == nil {
		pid, err := p.GetInt64("pid")
		if err == nil {
			localType, err := p.GetInt("localType", 0)
			if err != nil {
				localType = 0
			}
			regionID, err := p.GetInt("regionID", 0)
			if err != nil {
				regionID = 0
			}
			p.JSONSuccess(services.ProductServ.ProductSaleLocal(uint64(sid), uint64(pid), localType, regionID))
		} else {
			p.JSONFailedError(utils.LoseParam("pid[货品ID]"))
		}
	} else {
		p.JSONFailedError(utils.NotFoundSid)
	}
}
